'use strict';

var app = angular.module( 'myApp', [ 'ngRoute', 'ngAnimate', 'myApp.home-module', 'myApp.login-module' ] );

/* This function executes before app starts. Useful to initialize things*/
app.run( function( $rootScope, $http, $window ){
	
	/* Do this before routing */
	/* $rootScope.$on( '$routeChangeStart', function( event, next, prev ){
		
	});*/
	
	/* Override $http service's default transformRequest */
	$http.defaults.transformRequest = [ function(data) {
		return angular.isObject( data ) && String( data ) !== '[object File]' ? param( data ) : data;
	} ];
	
	/* Angular sends request params in JSON and PHP doesn't unserialize natively.
	 * This little script transform $http transform default from JSON to a PHP understable Object 
	 */
	 var param = function(obj) {
		 var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
	      
		 for(name in obj) {
			 value = obj[name];
	        
			 if(value instanceof Array) {
				 for(i=0; i<value.length; ++i) {
					 subValue = value[i];
					 fullSubName = name + '[' + i + ']';
					 innerObj = {};
					 innerObj[fullSubName] = subValue;
					 query += param(innerObj) + '&';
				 }
			 }else if(value instanceof Object) {
				 for(subName in value) {
					 subValue = value[subName];
					 fullSubName = name + '[' + subName + ']';
					 innerObj = {};
					 innerObj[fullSubName] = subValue;
					 query += param(innerObj) + '&';
				 }
			 }else if(value !== undefined && value !== null)
				 query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
		 }
	      
	    return query.length ? query.substr(0, query.length - 1) : query;
	  };
} );
